http://bugs.gentoo.org/401887

diff --git a/lib/src/libcommon.cpp b/lib/src/libcommon.cpp
index 16770a3..a4299e7 100644
--- a/lib/src/libcommon.cpp
+++ b/lib/src/libcommon.cpp
@@ -614,7 +614,7 @@ int unpack_zlib(const char* arch_file_name, const char* out_file_name)
 		return EXIT_FAILURE;
 	}
 	while(true) {
-		len = gzread(get_impl(in), buf, buffer_size);
+		len = gzread((gzFile)get_impl(in), buf, buffer_size);
 		if(len < 0) {
 			g_critical(read_file_err, arch_file_name, "");
 			return EXIT_FAILURE;
@@ -871,3 +871,8 @@ int remove_recursive(const std::string& path)
 		return res;
 	}
 }
+
+int gzclose_compat(void * file)
+{
+    return gzclose ((gzFile)file);
+}
diff --git a/lib/src/libcommon.h b/lib/src/libcommon.h
index 10f13b4..bdcbf2f 100644
--- a/lib/src/libcommon.h
+++ b/lib/src/libcommon.h
@@ -187,8 +187,9 @@ namespace clib {
 	typedef ResourceWrapper<FILE, FILE*, int, fclose> File;
 }
 
+extern int gzclose_compat(void * file);
 namespace zip {
-typedef ResourceWrapper<void, void*, int, gzclose> gzFile;
+typedef ResourceWrapper<void, void*, int, gzclose_compat> gzFile;
 }
 
 /* Create a new temporary file. Return file name in file name encoding.
 
